package mental_connect.backend.backend_ym.service;

import io.jsonwebtoken.*;

import java.nio.charset.StandardCharsets;
import java.util.Date;

public class JwtTokenService {
    private static final String secret = "写死的数据"; // 应该从安全的地方获取这个密钥

    public static String generateToken(String userId) {
        Date now = new Date();
        Date validity = new Date(now.getTime() + 3600 * 1000); // 有效期设置为1小时

        return Jwts.builder()
                .setSubject(userId) // 设置主体，这里使用用户ID
                .setIssuedAt(now) // 设置签发时间
                .setExpiration(validity) // 设置过期时间
                .signWith(SignatureAlgorithm.HS256, secret.getBytes(StandardCharsets.UTF_8)) // 使用HS256算法和密钥签名
                .compact(); // 生成并压缩成字符串形式的JWT
    }

    public static String getRedisKey(String token) {
        try {
            Claims claims = Jwts.parser()
                    .setSigningKey(secret.getBytes(StandardCharsets.UTF_8)) // 使用同一个密钥
                    .parseClaimsJws(token)
                    .getBody();

            return claims.getSubject(); // 获取主体（subject），即用户ID
        } catch (SignatureException e) {
            throw new IllegalArgumentException("Invalid JWT signature", e);
        } catch (MalformedJwtException e) {
            throw new IllegalArgumentException("Invalid JWT token", e);
        } catch (ExpiredJwtException e) {
            throw new IllegalArgumentException("Expired JWT token", e);
        } catch (UnsupportedJwtException e) {
            throw new IllegalArgumentException("Unsupported JWT token", e);
        } catch (IllegalArgumentException e) {
            throw new IllegalArgumentException("JWT claims string is empty.", e);
        }
    }
}
